package com.ficus.road.maintain.util;

import com.ficus.road.maintain.service.DataProcessorManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

@Component
@Slf4j
public class SsfFileUtil {
    public static final String DATA = "data";
    public static final String INDEX = "index";
    public static final String META = "meta";
    public static final String PIC = "pic";
    public static final String DISEASE = "disease";
    public static final String INSPECT = "inspect";
    public static volatile DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    @Autowired
    private AliyunOSSUtil aliyunOSSUtil;
    @Autowired
    private DataProcessorManager dataProcessorManager;
    @Value("${history-video.prefix}")
    private String prefix;

    //写数据

//    /**
//     * @param prefix
//     * @param fileName：以时间戳作为文件名
//     * @param firstTimeStamp:一次性传送的多个FrameMeta中的第一个FrameMeta的时间戳
//     * @param frameList
//     * @throws IOException
//     */
//    @LogExecutionTime
//    public void writeFrame(String prefix, String fileName, int firstTimeStamp, List<FrameMeta.FrameResult> frameList) throws IOException {
//        String dataFileName = prefix + "/" + DATA + "/" + fileName;
//        String indexFileName = prefix + "/" + INDEX + "/" + fileName;
//        OSSObjectSummary dataFileInfo = aliyunOSSUtil.getFileInfo(dataFileName);
//        long dataStartPosition = 0;
//        //若已经存在可追加文件（调用writeFrame的线程是一直在跑的），那么本次DATA和INDEX的追加位置就是可追加文件的大小
//        if (ObjectUtils.isNotEmpty(dataFileInfo)) {
//            dataStartPosition = dataFileInfo.getSize();
//        }
//        OSSObjectSummary indexFileInfo = aliyunOSSUtil.getFileInfo(indexFileName);
//        long indexStartPosition = 0;
//        if (ObjectUtils.isNotEmpty(indexFileInfo)) {
//            indexStartPosition = indexFileInfo.getSize();
//        }
//        //数据写入
//        appendSsfData(dataFileName, indexFileName, firstTimeStamp, dataStartPosition, indexStartPosition, frameList);
//    }

//    public String getPrefixByDate(String carId, String date) {
//        return prefix + "/" + carId + "/" + date;
//    }

//    public String getMetaPrefixByDate(String carId, String date) {
//        return prefix + "/" + carId + "/" + date + "/" + META;
//    }

//    public List<OSSObjectSummary> getIndexFilesByPrefix(String prefix) {
//        return aliyunOSSUtil.getFilesByPrefix(prefix + "/" + INDEX);
//    }

//    public void appendSsfData(String dataFileName, String indexFileName, int firstTimeStamp, long dataStartPosition, long indexStartPosition, List<FrameMeta.FrameResult> frameList) throws IOException {
//        //生成Index文件，需要知道追加到哪个index文件，追加的位置，哪个数据文件（由firstTimeStamp决定），数据文件的位置
//        aliyunOSSUtil.appendSsfIndex(indexFileName, indexStartPosition, firstTimeStamp, dataStartPosition);
//        ByteArrayBuffer byteArrayBuffer = new ByteArrayBuffer(1024);
//        //调用一次appendSsfData，将所有的帧放在同一个文件中，文件以第一个帧的时间戳命名，并以此为主键，放入索引文件中
//        for (FrameMeta.FrameResult frame : frameList) {
//            byte[] bytes = frame.toByteArray();
//            byteArrayBuffer.append(intToByteArray(bytes.length), 0, 4);
//            byteArrayBuffer.append(bytes, 0, bytes.length);
//        }
//        //生成Data文件
//        //data文件由Frame的大小，Frame的数据组成，同一批数据帧放到一个data文件中
//        aliyunOSSUtil.appendSsfData(dataFileName, dataStartPosition, byteArrayBuffer.toByteArray());
//    }

}
